/* =========================================================
   РИМСКИЕ ЦИФРЫ — помечаем классом .enl-roman,
   а «регистр букв.css» делает их заглавными
   ========================================================= */
(function () {
  if (/editMode[=\/]1/.test(location.href)) return;

  var TOKEN = /\b[ivx]+\b/gi;
  var ROMAN = /^(x{0,3})(ix|iv|v?i{0,3})$/i;           // I … XXXIX
  var SKIP  = /^(SCRIPT|STYLE|TEXTAREA|INPUT|SELECT|OPTION|CODE|PRE)$/;

  function wrap(node) {
    var text = node.nodeValue, out = null, last = 0, m;
    TOKEN.lastIndex = 0;
    while ((m = TOKEN.exec(text))) {
      if (!m[0] || !ROMAN.test(m[0])) continue;
      out = out || document.createDocumentFragment();
      out.appendChild(document.createTextNode(text.slice(last, m.index)));
      var s = document.createElement('span');
      s.className = 'enl-roman';
      s.textContent = m[0];
      out.appendChild(s);
      last = m.index + m[0].length;
    }
    if (!out) return;
    out.appendChild(document.createTextNode(text.slice(last)));
    var box = document.createElement('span');
    box.className = 'enl-roman-box';
    box.appendChild(out);
    node.parentNode.replaceChild(box, node);
  }

  function run() {
    if (!document.body) return;
    var w = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, {
      acceptNode: function (n) {
        var p = n.parentNode;
        if (!p || SKIP.test(p.nodeName)) return NodeFilter.FILTER_REJECT;
        if (p.closest && p.closest('.enl-roman, [contenteditable="true"]')) return NodeFilter.FILTER_REJECT;
        return /[ivx]/i.test(n.nodeValue) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
        if (p.closest && p.closest('.enl-roman, .enl-roman-box, [contenteditable="true"]')) return NodeFilter.FILTER_REJECT;
      }
    });
    var list = [], n;
    while ((n = w.nextNode())) list.push(n);
    list.forEach(wrap);
  }

  var t;
  function later() { clearTimeout(t); t = setTimeout(run, 80); }
  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run);
  else run();
  new MutationObserver(later).observe(document.documentElement, { childList: true, subtree: true });
})();